查看原文
其他

详细记录丨Realtek RTL8188FU WiFi 命令编译

小Z 编码小二 2022-09-10

Hello 大家好,上篇文章我总结了 WiFi 驱动移植及内核配置的教程

本篇文章介绍一下 WiFi 相关命令的交叉编译,希望对您能有帮助!

1 参考资料

1、编译过程,部分参考资料如下:

  • 【推荐】Linux 添加 WiFi 驱动(https://blog.csdn.net/sbddbfm/article/details/101222266)
  • linux下wifi工具iw的交叉编译(https://blog.csdn.net/weixin_42432281/article/details/85786866)
  • rtl8188 驱动移植 wifi工具移植(https://blog.csdn.net/wmdshhzsmile/article/details/102792811)
  • rtl8188 驱动移植 wifi工具移植(https://blog.csdn.net/wmdshhzsmile/article/details/102792811)
  • rtl8188etv 无线网卡驱动移植(https://blog.csdn.net/imlsq/article/details/72844532)

2、解决问题,部分参考资料如下:

  • 【问题1】line 1: syntax error: unexpected word (expecting ")")(https://blog.csdn.net/qq_26093511/article/details/78932765)
  • 【问题2】wifi模块配置ap模式下出现的问题(https://blog.csdn.net/qq_41877422/article/details/103194360)

3、还有一些其他前辈的教程,十分感谢!

2 环境介绍

1、Ubuntu18.04 ,不加密环境,版本信息如下:

zhaoc@Ubuntu1804:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 18.04.5 LTS
Release: 18.04
Codename: bionic


zhaoc@Ubuntu1804:~$ uname -a
Linux Ubuntu1804 5.4.0-54-generic #60~18.04.1-Ubuntu SMP Fri Nov 6 17:25:16 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

2、Linux 内核版本:4.4.179 ;

3、交叉编译链版本

arm-none-linux-gnueabi-gcc

gcc version 4.8.3 20140320 (prerelease) (Sourcery CodeBench Lite 2014.05-29)

3 简要说明

1、简要记录驱动移植过程中,交叉编译的命令、依赖库。

2、简要说明作用及版本等信息。

3.1 iw

1、使用的命令版本:4.9

目前发现 5.0 及以上版本用 arm-linux-gcc 编译都会报错,疑似交叉编译工具的 gcc 版本太低;

2、iw 命令是 iwconfig 命令的替代者,是 Linux 系统上的一款无线配置工具;

(1)参考资料:https://blog.csdn.net/qq_26602023/article/details/106115823

3、文件系统路径:/sbin

4、教程按照 v0.8.x_rtw_r24647.20171025 版本进行编译;

3.2 wpa_cli

1、使用的命令版本:wpa_cli v0.8.x_rtw_r24647.20171025

2、wpa_cli 用来查看设备当前连接 WiFi 状态;

3、文件系统路径:/usr/sbin

3.3 wpa_passphrase

1、使用的命令版本:未知;(应该与 wpa_cli 一致,即 v0.8.x_rtw_r24647.20171025 ,使用的同一个源码包)

2、暂时未用到此命令;

3、文件系统路径:/usr/sbin

3.4 wpa_supplicant

1、使用的命令版本:wpa_supplicant v2.9

2、命令作用:

(1)用于连接 WPA/WPA2 加密方式的 WiFi ;

(2)非加密方式的 WiFi ,也可使用此命令连接;

3、文件系统路径:/usr/sbin

3.5 hostapd

1、使用的命令版本:hostapd v2.9

2、命令作用:

(1)配置 WiFi 开启 AP 模式;

(2)参考帮助文档,描述如下:

User space daemon for IEEE 802.11 AP management,
IEEE 802.1X/WPA/WPA2/EAP/RADIUS Authenticator

3、文件系统路径:/bin

3.6 hostapd_cli

1、使用的命令版本:hostapd_cli v2.9

2、暂未使用;

3、文件系统路径:/bin

3.7 依赖库

1、libnl-3.so.200

(1)使用的库版本:libnl-3.5.0.tar.gz

(2)作用:WiFi 相关命令依赖库;

(3)文件系统路径:/lib

2、libnl-genl-3.so.200

(1)使用的库版本:libnl-3.5.0.tar.gz

(2)作用:WiFi 相关命令依赖库;

(3)文件系统路径:/lib

3、libssl.so.1.1

(1)使用的库版本:openssl-1.1.1h.tar.gz

(2)作用:WiFi 相关命令依赖库;

(3)文件系统路径:/lib

4、libcrypto.so.1.1

(1)使用的库版本:openssl-1.1.1h.tar.gz

(2)作用:WiFi 相关命令依赖库;

(3)文件系统路径:/usr/lib

5、补充说明

(1)需要在实际使用命令时,查看缺少的依赖库;

(2)上述 4 个依赖库,是我自己在测试时,发现缺少的;

(3)测试方法:直接运行命令,查看错误提示,根据错误提示添加相应的库文件;

(4)示例代码如下:

[root]#hostapd
hostapd: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory
[root]#

4 交叉编译

进行依赖库、命令的交叉编译。

4.1 openssl

1、解压并进入对应路径

# 解压文件
tar -zxvf openssl-1.1.1h.tar.gz

#
 进入文件路径
cd openssl-1.1.1h/

2、配置环境变量文件

(1)创建并编辑 env_nuc980 文件

vim env_nuc980

(2)填入如下内容

export MACHINE=armv4
export RELEASE=4.4.179
export SYSTEM=linux2
export ARCH=arm
export CROSS_COMPILE="arm-none-linux-gnueabi-"  # 指定交叉编译链
export HOSTCC=gcc                               # 指定gcc

(3)保存退出

(4)使用 source 命令使环境变量生效

source env_nuc980

3、修改相关编译配置选项

./config no-asm no-async shared --prefix=/home/zhaoc/11-Soft/13-NUC980/12-armCompileLib_2/11-install/openssl-1.1.1h_nuc980

(1)相关配置项说明

  • no-asm:在交叉编译过程中不使用汇编代码加速编译过程;
  • shared:生成动态连接库。
  • no-async:交叉编译工具链没有提供 GNU C 的 ucontext 库
  • --prefix=:安装路径

(2)安装路径需要修改为自己的安装路径;

4、make 编译;-j6 :使用 6 个逻辑内核同时编译,速度更快;

make -j6

5、安装编译后的文件,到对应路径

make install

4.2 libnl

1、解压并进入对应路径

# 解压文件
tar -zxvf libnl-3.5.0.tar.gz

#
 进入对应路径
cd libnl-3.5.0/

2、Ubuntu 需安装必备工具,否则会报错

sudo aptitude install bison
sudo aptitude install flex

(1)没有安装对应软件时,报错内容如下

checking for dlfcn.h... (cached) yes
checking for pthread_mutex_lock in -lpthread... yes
checking for strerror_l... no
configure: WARNING: bison not found. Please install before continuing.
configure: WARNING: flex not found. Please install before continuing.
configure: error: Required packages are missing. Please install them and rerun /configure
root@qddytt:/opt/IPC3516EV200/libnl-3.5.0# 

3、修改相关编译配置选项;注意修改为自己的安装路径

./configure --host=arm-none-linux-gnueabi --prefix=/home/zhaoc/11-Soft/13-NUC980/12-armCompileLib_2/11-install/libnl-3.5.0_nuc980

(1)相关配置项说明

  • --host:指定交叉编译链
  • --prefix=:安装路径

(2)安装路径需要修改为自己的安装路径;

4、make 编译;-j6 :使用 6 个逻辑内核同时编译,速度更快;

make -j6

5、安装编译后的文件,到对应路径

make install

4.3 iw

1、解压并进入对应路径

# 解压文件
tar -zxvf iw-4.9.tar.gz

#
 进入对应路径
cd iw-4.9/

2、配置环境变量;对应 libnl 的安装路径下的 lib/

export PKG_CONFIG_PATH=/home/zhaoc/11-Soft/13-NUC980/12-armCompileLib_2/11-install/libnl-3.5.0_nuc980/lib/pkgconfig:$PKG_CONFIG_PATH

3、使用指定交叉编译链编译

make CC=arm-none-linux-gnueabi-gcc

4、编译完成后,可以使用 file 命令,查看下 iw 文件的属性

(1)本次使用 arm-none-linux-gnueabi-gcc 的属性如下

zhaoc@Ubuntu1804:~/11-Soft/13-NUC980/12-armCompileLib_2/12-sourcecode/iw-4.9$ file iw
iw: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /li

(2)之前使用 arm-linux-gcc 时(错误版本),类似文件( wpa_supplicant )属性如下

wpa_supplicant: ELF 64-bit LSB  shared object, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 3.2.0, BuildID[sha1]=abd215c0dc5a490e088db5fc57f26b1efa8b670e, not stripped

(3)命令属性,必须为 ARM 类型的才可以,否则 不能在板子上正常运行

4.4 wpa_supplicant

1、解压并进入对应路径

# 解压文件
tar -zxvf wpa_supplicant_hostapd-0.8_rtw_r24647.20171025.tar.gz

#
 进入对应路径
cd wpa_supplicant_hostapd-0.8_rtw_r24647.20171025/wpa_supplicant/

2、编辑 Makefile 文件,修改使用的交叉编译链(两处修改),保存退出;

ifndef CC
CC=arm-none-linux-gnueabi-gcc
endif

ifndef CFLAGS
CFLAGS = -MMD -O2 -Wall -g
endif

CC=arm-none-linux-gnueabi-gcc

export LIBDIR ?= /usr/local/lib/

make 编译;-j6 :使用 6 个逻辑内核同时编译,速度更快;

make -j6

4.5 hostapd

1、解压并进入对应路径

# 解压文件
tar -zxvf hostapd-2.9.tar.gz

#
 进入对应路径
cd hostapd-2.9/hostapd/

2、使用默认配置文件,创建 config 文件

cp defconfig .config

3、使用 vim 修改 .config ,(取消注释)

#CONFIG_IEEE80211N=y

改为

CONFIG_IEEE80211N=y

否则后续会报错:

~ # hostapd ./hostapd.conf 
Configuration file: ./hostapd.conf
Line 7: unknown configuration item 'ieee80211n'
1 errors found in configuration file './hostapd.conf'
Failed to set up interface with ./hostapd.conf
Failed to initialize interface

显示行号路径如下:

156 
157 # IEEE 802.11n (High Throughput) support
158 CONFIG_IEEE80211N=y
159 

4、备份 Makefile 文件,免得误操作之后还要重新解压一份文件;

cp Makefile Makefile.bak

5、编辑 Makefile 文件,新增如下内容,注意是 新增内容

CC=arm-none-linux-gnueabi-gcc

CFLAGS += -I /home/zhaoc/11-Soft/13-NUC980/14-armCompileLib_20201201/11-install/libnl-3.5.0_nuc980/include
LIBS += -L /home/zhaoc/11-Soft/13-NUC980/14-armCompileLib_20201201/11-install/libnl-3.5.0_nuc980/lib

CFLAGS += -I /home/zhaoc/11-Soft/13-NUC980/14-armCompileLib_20201201/11-install/openssl-1.1.1h_nuc980/include
LIBS += -L /home/zhaoc/11-Soft/13-NUC980/14-armCompileLib_20201201/11-install/openssl-1.1.1h_nuc980/lib -lcrypto -lssl

LDFLAGS += -lpthread
LDFLAGS += -lm

6、添加环境变量,如下所示;

export PKG_CONFIG_PATH=/home/zhaoc/11-Soft/13-NUC980/14-armCompileLib_20201201/11-install/libnl-3.5.0_nuc980/lib/pkgconfig:$PKG_CONFIG_PATH

7、make 编译;-j6 :使用 6 个逻辑内核同时编译,速度更快;

make -j6

8、编译完成后,就会在当前目录生成所需的 hostapdhostapd_cli 文件,不需要 make install 即可;

9、使用 file 命令,查看编译后的文件属性,如果属性为 ARM ,即代表可以在开发板上运行;

zhaoc@Ubuntu1804:~/11-Soft/13-NUC980/13-armCompileLib_20201130/12-sourcecode/hostapd-2.9/hostapd$ file hostapd
hostapd: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.3, for GNU/Linux 2.6.16, with debug_info, not stripped

至此,所有使用到的命令均已编译完毕。

5 测试验证

分两步进行,第一步将命令放到文件系统中;第二步测试连接 WiFi 是否正常。

5.1 命令替换

1、替换 wpa_cli wpa_passphrase wpa_supplicant

  • 进入对应目录
# 进入对应目录
cd /usr/sbin/
  • 查看当前目录文件
# 查看当前目录文件
ls -l
  • 删除文件
# 删除文件
rm wpa_cli wpa_passphrase wpa_supplicant
  • 拷贝交叉编译好的命令到当前目录(其他方式均可)
# 拷贝交叉编译好的命令到当前目录
lrz
  • 赋予可执行权限
# 赋予可执行权限
chmod 777 wpa_cli wpa_passphrase wpa_supplicant
  • 直接输入命令,测试是否缺少依赖库
# wpa_supplicant 测试
wpa_supplicant

#
 wpa_passphrase 测试
wpa_passphrase

#
 wpa_cli 测试
wpa_cli

2、替换 iw

  • 进入对应目录
# 进入对应目录
cd /sbin/
  • 拷贝 iw 到此目录(其他方式均可)
# 拷贝 iw 到此目录
lrz
  • 可以看到拷贝进来的文件没有执行权限,修改文件权限
chmod 777 iw
  • 直接输入命令,测试是否缺少依赖库
# 输入命令
iw
  • 我的开发板提示缺少库文件:libnl-genl-3.so.200
  • 则去编译好的 libnl 安装路径中拷贝对应库文件进来即可;
  • 相对路径:11-install\libnl-3.5.0_nuc980\lib
  • 修改新拷贝的库文件权限
chmod 755 libnl-genl-3.so.200
  • 接着再次从命令行输入 iw 测试命令,提示缺少库文件:libnl-3.so.200
  • 参考上述方法,拷贝文件到对应路径,同样修改库文件权限为 755 ;
  • 再次使用 iw 测试命令,发现没有异常提示,可以正常打印相关配置信息;
  • 此时代表命令已可以正常运行;

5.2 连接 WiFi

1、新增连接 WiFi 的配置文件

(1)创建新文件

# 开发板没有 vim
vi r8000.conf

(2)填入如下内容

ctrl_interface=/var/run/wpa_supplicant
ap_scan=1
network={
        ssid="WIFI名称"
        psk="WIFI密码明文"
}

2、配置连接 WiFi

# 查看网卡连接状态
wpa_cli -iwlan0 status

#
 使用配置文件连接 WiFi
wpa_supplicant -iwlan0 -c ./r8000.conf -B

#
 开启网卡(可选)
ifconfig wlan0 up

#
 再次查看网卡连接状态
wpa_cli -iwlan0 status

#
 设置固定 IP 地址,子网掩码
ifconfig wlan0 192.168.60.1 netmask 255.255.255.0

#
 设置默认网关
route add default gw 192.168.60.254

#
 修改 DNS ,根据参考资料进行配置;
echo nameserver 223.5.5.5 > /etc/resolv.conf

3、使用 ping 测试 WiFi ,验证是否正常;

ping baidu.com

4、如果可以能 ping 通,则表示命令可以正常运行。

6 总结

本教程为自己在实际使用过程中的经验总结,希望能够帮到您。

好了,本期内容就是这样,祝您一切顺利,我们下期再见!


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存